/* Copyright (c) 2015 - 2017, Nordic Semiconductor ASA
 *
 * All rights reserved.
 *
 * Use in source and binary forms, redistribution in binary form only, with
 * or without modification, are permitted provided that the following conditions
 * are met:
 *
 * 1. Redistributions in binary form, except as embedded into a Nordic
 *    Semiconductor ASA integrated circuit in a product or a software update for
 *    such product, must reproduce the above copyright notice, this list of
 *    conditions and the following disclaimer in the documentation and/or other
 *    materials provided with the distribution.
 *
 * 2. Neither the name of Nordic Semiconductor ASA nor the names of its
 *    contributors may be used to endorse or promote products derived from this
 *    software without specific prior written permission.
 *
 * 3. This software, with or without modification, must only be used with a Nordic
 *    Semiconductor ASA integrated circuit.
 *
 * 4. Any software provided in binary form under this license must not be reverse
 *    engineered, decompiled, modified and/or disassembled.
 *
 * THIS SOFTWARE IS PROVIDED BY NORDIC SEMICONDUCTOR ASA "AS IS" AND ANY EXPRESS OR
 * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
 * MERCHANTABILITY, NONINFRINGEMENT, AND FITNESS FOR A PARTICULAR PURPOSE ARE
 * DISCLAIMED. IN NO EVENT SHALL NORDIC SEMICONDUCTOR ASA OR CONTRIBUTORS BE LIABLE
 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
 * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
 * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR
 * TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
 * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 */

'use strict';

import { logger } from 'nrfconnect/core';

import '../../resources/css/colordefinitions.scss';

const CSS_CLASS_PREFIX = 'colordefinition';
const FALLBACK_COLOR = { r: 255, g: 0, b: 0 };

function initColors(rules) {
    const colors = {};
    rules.forEach(rule => {
        const regex = new RegExp(`.${CSS_CLASS_PREFIX}-(.*)`);
        const key = regex.exec(rule.selectorText)[1];
        colors[key] = rule.style.color;
    });
    return colors;
}

function findColorDefinitionRules() {
    const rules = [];
    for (let i = 0; i < document.styleSheets.length; i += 1) {
        const { cssRules } = document.styleSheets[i];
        for (let j = 0; j < cssRules.length; j += 1) {
            const rule = cssRules[j];
            if (
                rule.selectorText &&
                rule.selectorText.indexOf(CSS_CLASS_PREFIX) !== -1
            ) {
                rules.push(rule);
            }
        }
    }
    return rules;
}

const colors = initColors(findColorDefinitionRules());

export default {
    getColor(color) {
        const rgbString = colors[color];
        if (!rgbString) {
            logger.debug(`Color ${color} is not defined`);
            return FALLBACK_COLOR;
        }
        const rgbArray = rgbString.replace(/[^\d,]/g, '').split(',');
        return {
            r: rgbArray[0],
            g: rgbArray[1],
            b: rgbArray[2],
        };
    },
};
